//! Nacos服务器主程序
//!
//! 提供Nacos服务器的完整启动流程和服务初始化
//!
//! # 功能概述
//! - 启动REST API服务器监听端口8848
//! - 启动gRPC服务器监听端口9090
//! - 初始化内存存储服务
//! - 启动集群管理
//! - 集成命名服务和配置服务
//!
//! # 启动流程
//! 1. 创建完整的Nacos服务器实例
//! 2. 启动所有服务组件
//! 3. 等待服务运行

use nacos_core::Result;
use nacos_server::NacosServer;
use nacos_server::server::ServerConfig;
use tracing::{info, error};

/// 主程序入口
///
/// 负责启动Nacos服务器的完整流程
#[tokio::main]
async fn main() -> Result<()> {
    // 初始化日志
    tracing_subscriber::fmt::init();

    info!("🚀 正在启动Nacos服务器...");

    // 创建服务器配置
    let config = ServerConfig::default();
    
    info!("📋 服务器配置: {:?}", config);

    // 创建Nacos服务器实例
    let server = NacosServer::new(config)?;

    info!("🔧 服务器实例创建成功");

    // 启动服务器
    if let Err(e) = server.start().await {
        error!("❌ 服务器启动失败: {}", e);
        return Err(e);
    }

    info!("🎉 Nacos服务器启动成功！");
    info!("📡 REST API端口: 8848");
    info!("🌐 gRPC端口: 9090");
    info!("💾 存储类型: 内存存储");
    info!("🔍 健康检查间隔: 30秒");
    info!("🌐 集群模式: 单机模式");

    // 等待服务器运行
    tokio::signal::ctrl_c().await.map_err(|e| nacos_core::NacosError::Internal(e.to_string()))?;

    info!("🛑 收到停止信号，正在关闭服务器...");

    // 停止服务器
    server.stop().await?;

    info!("✅ 服务器已正常关闭");

    Ok(())
}
